from django.db import models
class CommonModel(models.Model):
    """ 自定义模型的基类--公共模型类，都会用到的一段 """
    created_at = models.DateTimeField('注册时间', auto_now_add=True)
    updated_at = models.DateTimeField('最后修改时间', auto_now=True)
    class Meta:
        # 抽象类，这个类，并不会生成对应的数据库表
        abstract = True

class User(CommonModel):
    """ 用户模型 """
    name = models.CharField('姓名', max_length=64)
    sex = models.CharField('性别', max_length=1, choices=(
        ('1', '帅哥'),
        ('0', '美女'),
    ), default='1')
    age = models.PositiveIntegerField('年龄', default=0)
    username = models.CharField('用户名', max_length=64, unique=True)
    password = models.CharField('密码', max_length=256)
    remark = models.CharField('备注', max_length=64, null=True, blank=True)
    email = models.EmailField('用户的邮箱', max_length=64, null=True, blank=True)
    #created_at = models.DateTimeField('注册时间', auto_now_add=True)
    #updated_at = models.DateTimeField('最后修改时间', auto_now=True)
    collect_ques = models.ManyToManyField('Question')  # 多对多 ManyToManyField
        # 若前文没有定义Question,则需要加引号写'Question'
    class Meta:
        db_table = 'user'
    def xxx(self):
        pass


class Manager(User):
    class Meta:
        proxy = True   # 管理员代理上边游客的所有功能，还可以对父模型的功能进行扩充

    def xxx(self):
        pass

class Profile(CommonModel):  # 一对一 OneToOneField
    """ 用户详细信息 """
    # zhangsan = User()
    # zhangsan.profile          前文定义了User,所以可以直接用User，不用加''
    user = models.OneToOneField(User, on_delete=models.CASCADE,# 删除主，就会跟着删除外键关联的相关东西
                                related_name='profile',
                                db_column='user')
    nickname = models.CharField('昵称', max_length=64)

class Question(CommonModel): #一对多 ForeignKey
    """ 问题 """
    name = models.CharField('问题名称', max_length=64)

class Answer(CommonModel):
    """ 答案 """
    question = models.ForeignKey(Question, on_delete=models.CASCADE,
                                 related_name='answers',
                                 verbose_name='关联的问题')
    content = models.TextField('答案的内容')

class Classify(models.Model):
    """ 分类
    1 酒水
       2 啤酒
       3 白酒
    """
    name = models.CharField('名称', max_length=64)
    parent = models.ForeignKey('self', related_name='children',
                               on_delete=models.CASCADE)